【小ネタ】EBS最適化インスタンスをCLIツールでスペックダウンするときの注意点
こんにちは。半瀬です。
今回も運用備忘ネタです。コツコツ書きます。
マネジメントコンソールを使用せずに、aws cliやaws tools(windows) などからインスタンスのスペック変更を実行するとき、 EBS最適化インスタンスを、EBS最適化の有効化ができないインスタンスタイプへスペックダウンをした場合、EBS最適化を「無効」とする処理を入れないと起動に失敗します。というお話です(おわり)。
簡単に確認
今回はお問い合わせ頂いた環境がwindowsインスタンスでしたので、「aws tools for windows powershell」 を使用した確認となっています。
以下の2インスタンスを用意します。 ・powershell実行元インスタンス(t2.micro) ・操作対象インスタンス(c4.large+EBS最適化を「有効」として起動)
※ regionはus-west-2(オレゴン)です ※ 実行元インスタンスですが、諸事情によりIAMロールを付与していませんでしたので、AdministratorAccessを持たせたIAMユーザーキーを設定しておきます。
PS C:\Users\Administrator> Set-AWSCredentials -AccessKey xxxxxxxxxxx -SecretKey xxxxxxxxxxx INFO: Credentials loaded from the supplied key parameters.
起動に失敗するケースを確認します
「Get-EC2InstanceStatus」でインスタンスIDなどを確認します。 powershellインスタンス(操作元)は「i-axxxxxxx」 操作対象インスタンスは「i-bxxxxxxx」 となります。
PS C:\Users\Administrator> Get-EC2InstanceStatus -region us-west-2 AvailabilityZone : us-west-2a Events : {} InstanceId : i-axxxxxxx InstanceState : Amazon.EC2.Model.InstanceState Status : Amazon.EC2.Model.InstanceStatusSummary SystemStatus : Amazon.EC2.Model.InstanceStatusSummary AvailabilityZone : us-west-2b Events : {} InstanceId : i-bxxxxxxx InstanceState : Amazon.EC2.Model.InstanceState Status : Amazon.EC2.Model.InstanceStatusSummary SystemStatus : Amazon.EC2.Model.InstanceStatusSummary
スペックダウンのため、停止します
PS C:\Users\Administrator> Stop-EC2Instance -Instance i-bxxxxxxx -Region us-west-2 CurrentState InstanceId PreviousState ------------ ---------- ------------- Amazon.EC2.Model.InstanceState i-bxxxxxxx Amazon.EC2.Model.InstanceState
停止したインスタンスのスペックダウン
停止したインスタンスの、EBS最適化が有効になっていることを確認 ↓「EbsOptimized」が「true」(※変更前のインスタンスタイプ:c4.largeも確認
PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instancetype BlockDeviceMappings : {} DisableApiTermination : False EbsOptimized : True Groups : {} InstanceId : i-bxxxxxxx InstanceInitiatedShutdownBehavior : InstanceType : c4.large KernelId : ProductCodes : {} RamdiskId : RootDeviceName : SourceDestCheck : False SriovNetSupport : UserData :
インスタンスタイプを「c4.large」から「t2.micro」に変更します。
PS C:\Users\Administrator> Edit-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instanceType -Value t2.micro
変更後のインスタンスタイプの確認 ↓「InstanceType」が「t2.micro」に変更
PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instancetype BlockDeviceMappings : {} DisableApiTermination : False EbsOptimized : False Groups : {} InstanceId : i-bxxxxxxx InstanceInitiatedShutdownBehavior : InstanceType : t2.micro KernelId : ProductCodes : {} RamdiskId : RootDeviceName : SourceDestCheck : False SriovNetSupport : UserData :
↑ここで、「EbsOptimized」が「False」となっていることが、確認できます。 「t2.micro」はEBS最適化を利用できないインスタンスタイプなので問題なし → このまま起動してみるか、ということで起動してみると、、
PS C:\Users\Administrator> Start-EC2Instance -InstanceId i-bxxxxxxx -Region us-west-2 Start-EC2Instance : EBS-optimized instances are not supported for your requested configuration. Please check the documentation for supported configurations. At line:1 char:1 + Start-EC2Instance -InstanceId i-bxxxxxxx -Region us-west-2 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Amazon.PowerShe...2InstanceCmdlet:StartEC2InstanceCmdlet) [Start-EC2I nstance], InvalidOperationException + FullyQualifiedErrorId : Amazon.EC2.AmazonEC2Exception,Amazon.PowerShell.Cmdlets.EC2.StartEC2InstanceCmdlet
「Start-EC2Instance : EBS-optimized instances are not supported for your requested configuration」 怒られてしまいます。
EBS最適化を無効化してから起動しましょう
内部的に「EbsOptimized」が「true」となったままとなっている模様です。 ↓明示的に「false」にしてやると、、
PS C:\Users\Administrator> Edit-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute ebsOptimized -Value false
↓確認結果に変化はありません。
PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute ebsOptimized BlockDeviceMappings : {} DisableApiTermination : False EbsOptimized : False Groups : {} InstanceId : i-bxxxxxxx InstanceInitiatedShutdownBehavior : InstanceType : KernelId : ProductCodes : {} RamdiskId : RootDeviceName : SourceDestCheck : False SriovNetSupport : UserData :
↓ですが、起動コマンドが通るようになります。
PS C:\Users\Administrator> Start-EC2Instance -InstanceId i-bxxxxxxx -Region us-west-2 CurrentState InstanceId PreviousState ------------ ---------- ------------- Amazon.EC2.Model.InstanceState i-bxxxxxxx Amazon.EC2.Model.InstanceState PS C:\Users\Administrator>
無事起動ができます。
もともとEBS最適化を利用していないインスタンスは。。
念のため、最初からEBS最適化を使っていない場合を確認しておきました。 ・powershell実行元インスタンス(t2.micro) ・操作対象インスタンス(c4.large+EBS最適化を「無効」として起動) 同じように ID「i-bxxxxxxx」に対して実行確認します。 ↓はじめから「EbsOptimized」を「false」で用意
PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instancetype BlockDeviceMappings : {} DisableApiTermination : False EbsOptimized : False Groups : {} InstanceId : i-bxxxxxxx InstanceInitiatedShutdownBehavior : InstanceType : c4.large KernelId : ProductCodes : {} RamdiskId : RootDeviceName : SourceDestCheck : False SriovNetSupport : UserData :
停止↓
PS C:\Users\Administrator> Stop-EC2Instance -Instance i-bxxxxxxx -Region us-west-2 CurrentState InstanceId PreviousState ------------ ---------- ------------- Amazon.EC2.Model.InstanceState i-bxxxxxxx Amazon.EC2.Model.InstanceState
↓スペック変更
PS C:\Users\Administrator> Edit-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instanceType -Value t2.micro
↓変更確認
PS C:\Users\Administrator> Get-EC2InstanceAttribute -InstanceId i-bxxxxxxx -Region us-west-2 -Attribute instancetype BlockDeviceMappings : {} DisableApiTermination : False EbsOptimized : False Groups : {} InstanceId : i-bxxxxxxx InstanceInitiatedShutdownBehavior : InstanceType : t2.micro KernelId : ProductCodes : {} RamdiskId : RootDeviceName : SourceDestCheck : False SriovNetSupport : UserData :
↓「ebsOptimized」への操作を加えずに起動してみる
PS C:\Users\Administrator> Start-EC2Instance -InstanceId i-bxxxxxxx -Region us-west-2 CurrentState InstanceId PreviousState ------------ ---------- ------------- Amazon.EC2.Model.InstanceState i-bxxxxxxx Amazon.EC2.Model.InstanceState
無事通りました。予めEBS最適化を利用していないインスタンスからのスペックダウンの場合は必要がないようです。
さいごに
EBS最適化インスタンスをCLIツールからスペックダウンをする場合に起動失敗するケースをご紹介しました。 "CLIツールで"EBS最適化インスタンスからEBS最適化を有効化できないインスタンスに、スペックダウンをする場合は、スペック変更とあわせて、EBS最適化を「無効」とする処理を忘れないようにしましょう。
それではー。